<?php
/**
 * Класс Controller_Ajax_User отвечает за обработку ajax-запросов пользователя
 * @author Mike
 */
class Controller_Ajax_User extends Controller_Ajax {
	
	public function actionSwitch() {
		switch ($this->arrRequest[2]) {
			case 'auth-in' : 
				$this->actionAuthIn();
				break;
			case 'avatar-upload' :
				$this->actionAvatarUpload();
				break;
			case 'check-mail' :
				$this->actionCheckMail();
				break;
			case 'reg-from-vk' :
				$this->actionRegFromVk();
				break;
			default:
				$this->setError(404);
				break;
		}
	}
	
	/**
	 * Вход пользователя
	 */
	private function actionAuthIn() {
		$eMail = isset($_POST['e_mail']) ? Service_Escape::absolutelyEscapeString($_POST['e_mail']) : '';
		$password = isset($_POST['password']) ? Service_Escape::absolutelyEscapeString($_POST['password']) : '';
		
		if (empty($eMail) || empty($password)) return $this->makeStandardError('Не получены данные');
		
		$hash = md5($eMail . $password . 'outsider');
		$objUser = new User_User();
		$result = $objUser->find('first',array('select' => '`user`.`ID_user`,`user`.`e_mail`',
				'conditions' => "`user`.`password`='" . $hash . "'"));
		
		if($objUser->id) {
			$this->arrReturn = array('result' => 'OK');
			User_Seance::authorizationIn($objUser);
		}
		else $this->makeStandardError('FAIL');
	}
	
	/**
	 * Добавление автара
	 */
	private function actionAvatarUpload() {
		$objUser = User_Seance::getUser();
		if($objUser->id) {
			$allowedExtensions = array('jpg','png');
			$sizeLimit = 5 * 1024 * 1024;
			$uploader = new Service_qqFileUploader($allowedExtensions, $sizeLimit);
			$uploadDirectory = IMAGES . '/essence/user/' . $objUser->id;	// Если менять, то так же поменять в qqFileUploader->saveUserAvatar
			
			
			$result = $uploader->handleUpload($uploadDirectory, true, 'user-ava', $objUser);
			$this->arrReturn = $result;
		}
	}
	
	/**
	 * Проверяет существует ли уже в БД пользователь с заданной почтой
	 */
	private function actionCheckMail() {
		$eMail = isset($_POST['email']) ? Service_Escape::absolutelyEscapeString($_POST['email']) : '';

		if(empty($eMail)) return $this->makeStandardError('Не получены данные');

		$objUser = new User_User();
		$result = $objUser->find('first', array('conditions' => "`user`.`e_mail`='" . $eMail . "'"));
		
		if(!$objUser->id) $this->arrReturn = array('result' => 'OK');
		else $this->arrReturn = array('result' => 'FAIL');
	}
	
	/**
	 * Регистрирует аккаунт пользователя из ВК-аккаунта
	 */
	private function actionRegFromVk() {
		$eMail = isset($_POST['email']) ? Service_Escape::absolutelyEscapeString($_POST['email']) : '';
		$pass = isset($_POST['password']) ? Service_Escape::absolutelyEscapeString($_POST['password']) : '';
		$passConf = isset($_POST['conf']) ? Service_Escape::absolutelyEscapeString($_POST['conf']) : '';
		$objUser = User_Seance::getUser();
	
		if(empty($eMail) || empty($pass) || !$objUser->id || empty($passConf)) return $this->makeStandardError('Не получены данные');
	
		if($objUser->getField('e_mail') !== null || $objUser->getField('password') !== null || $pass != $passConf) $this->makeStandardError('Недопустимое действие');
		
		$objUser->setFields(array('e_mail' => $eMail, 'password' => $pass));
		
		$objUser->validateFormatOf('e_mail', array('with' => '/^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})$/i', 'message' => 'Электронная почта заполнена неверно'));
		$objUser->validateLengthOf('password', array('min' => 6, 'max' => 64, 'message' => 'Пароль заполнен неверно (6-64 симолов)'));
		
		
		if(!empty($objUser->arrErrors)) return $this->makeStandardError('Ошибка валидации');
		
		if(!$objUser->isFreeEmail($objUser->getField('e_mail'))) $this->arrReturn = array('result' => 'DUBLE');
		else if($objUser->updateFields(array('e_mail' => $eMail, 'password' => md5($eMail . $pass . 'outsider')))) {
			User_Seance::authorizationIn($objUser);
			$this->arrReturn = array('result' => 'OK');
		}
		else $this->arrReturn = array('result' => 'FAIL');
	}
}
?>